<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>认识VueComponent</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 
				School组件的本质到底是什么？
						1.School组件的本质是一个构造函数，名为VueComponent。
						2.VueComponent这个构造函数，不是程序员定义的，是Vue.extend()生成的。
						3.Vue.extend()每次生成的都是一个全新的VueComponent构造函数！！！！！！！！！（以后会用到）
						4.我们只需要写<School></School>或<School/> Vue就会帮我们执行： new VueComponent(options)。
						5.关于this：
								(1).组件配置中：
											data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】。vc
								(2).new Vue(options)配置中：
											data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。vm
						6.VueComponent的实例对象，以后简称vc（也可称之为：组件实例对象）,Vue的实例对象，以后简称vm。
						7.vc就是一个小型的vm（vc也有：数据劫持、数据代理、生命周期.....）
		 -->
		<!-- 准备好一个容器-->
		<div id="demo"></div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
		
		// 创建School组件
		const School = Vue.extend({
			name:'School',
			template:`
				<div>
					<h2>学校名称：{{name}}</h2>
					<h2>学校地址：{{address}}</h2>
					<button @click="showSchool">提示学校信息</button>
				</div>
			`,
			data() {
				console.log('School组件中data中的this',this)
				return {
					name:'尚硅谷',
					address:'宏福科技园',
					c:'789'
				}
			},
			methods:{
				showSchool(){
					console.log('School组件中methods中的this',this)
					alert(`${this.name}，${this.address}`);
				}
			}
		})

		//创建Person组件
		const Person = Vue.extend({
			name:'Person',
			data() {
				console.log('Person组件中data中的this',this)
				return {
					b:'456'
				}
			},
			template:`<h2>我是一个人</h2>`
		})

		// console.log(School === Person) //false

		new Vue({
			el:'#demo',
			components:{School,Person},
			data() {
				console.log('Vue实例中data中的this',this)
				return {
					a:'123'
				}
			},
			template:`
				<div>
					<School/>
					<Person/>
				</div>
			`
		})
	</script>
</html>